<?php
/**
 * Глобальный класс управления логированием действий
 * 
 * @category Phorm
 * @package Log
 * @name /Phorm/Log.php
 * @copyright phorm.ru
 * @since 28.12.2012
 * @author vladimir@kachalov.net
 */

class Phorm_Log extends Phorm_Model {
	
	
	/**
	 * Возвращает список записей в логе
	 *
	 * @param array $options
	 * @return array
	 */
	
	public function getLogRecords($options = array()) {
		
		$tableCols = $this->getTableCols('pw_log');
		
		$select = $this->_db->select()
				-> from(array('AA'=>'pw_log'), new Zend_Db_Expr('SQL_CALC_FOUND_ROWS DISTINCT AA.*, 1 actions'))
				-> join(array('BB'=>'pw_mvc_resources'),'AA.mvcid=BB.resourceid')
				-> join(array('CC'=>'pw_users'),'AA.userid=CC.userid');

		// Дата действия
		if(isset($options['actiondate_from']) && trim($options['actiondate_from'])!='') {
			$select -> where('AA.actiondate>=?',strtotime($options['actiondate_from']));
		}
		if(isset($options['actiondate_to']) && trim($options['actiondate_to'])!='') {
			$select -> where('AA.actiondate<=?',strtotime($options['actiondate_to']));
		}

		// Другие условия для выборки
		foreach ($options as $optionname=>$optionvalue) {
			if(in_array($optionname,$tableCols)) {
				$select -> where('AA.' . $optionname . '=?', $optionvalue);
			}
		}
		
		// Сортировки
		if(isset($options['sortField']) && in_array($options['sortField'],$tableCols)) {
			$sortOrder = isset($options['sortOrder']) && $options['sortOrder']=='desc' ? ' DESC' : ' ASC';
			$select -> order($options['sortField'].$sortOrder);
		} else {
			$select -> order('logid DESC');
		}
		
		// Устанавливаем количество отдаваемых строк
		// Если передан 0, то возвращаем все найденные строки
		if (isset($options['rowsperpage']) && $options['rowsperpage']>0) {
			$select -> limitPage($this->getCurrentPage(),(int)$options['rowsperpage']);
		} elseif(!isset($options['rowsperpage'])) {
			$select -> limitPage($this->getCurrentPage(),$this->getPerPage());
		}
		
		return $this->_db->fetchAll($select);
		
	}
	
	
}